1. Field of the Invention
The present invention generally relates to generation of a hue slice table for use in gamut mapping, and extraction of a hue slice from the generated table. In more detail, the present invention generates a hue slice table by obtaining hue slices at each vertex point on a boundary surface of a device's color gamut and then generating additional hue slices between the vertex point hue slices to fill-in the table. In generating each hue slice, the invention utilizes a point ordering technique that results in a more accurate representation of each slice. Once the table is generated, the invention provides a unique linear interpolation extraction technique to obtain a hue slice from the table if a hue slice at a requested hue angle does not already exist in the table.
2. Description of the Related Art
Gamut mapping relates to image reproduction from one imaging device to another, such as reproducing an image displayed on a color monitor as a printed image printed by a color printer. To reproduce the image, the color gamut (a range of producible colors) of a source device (such as the color monitor) needs to be mapped to the color gamut of a destination device (such as the printer).
Colors in a color management system are represented in a color appearance space (e.g., CIECAM). For gamut mapping, colors are mapped to appearance space Jch. There are generally two representations of this space: Cartesian (Jab), wherein “a” corresponds to red-green and “b” corresponds to blue-yellow, and cylindrical (Jch), where “h” represents an angular position around the “J” axis and “c” (chroma) represents a Euclidean distance from the “J” axis. The “J” axis represents lightness in both spaces. The foregoing has been described in detail by the CIE (Commission Internationale de l'Écairage/International Commission on Illumination).
Generally, although not always, the color gamut of the source device may be larger than the color gamut of the destination device. Thus, although some portions of each color gamut overlap one another, other portions of the larger gamut are outside that of the smaller gamut. Therefore, colors in the larger gamut that fall outside the smaller gamut need to be compressed so that these out-of-gamut colors can be reproduced by the destination device. As such, it is often necessary to map colors between two devices that have different sized gamuts. For example, it may be necessary to map colors from a color monitor that uses a large color space, such as Adobe RGB color space, to a printer that uses a subtractive colorant space, such as CMYK.
Various techniques have been utilized in performing gamut mapping so as to reproduce colors as accurately as possible. Some conventional techniques utilize a hue slice look-up table in a lightness (J), chroma (c), hue (h) coordinate system. A hue-slice look-up table generally contains hue slices that are formed by the intersection of a plane though the lightness axis and the gamut surface at various hue angles (ranging from 0 to 360 degrees, where angles near 30 degrees appear reddish, angles near 210 degrees appear greenish, etc.) In this technique, hue slices are taken through the gamut at a predetermined fixed number of hue angles so as to attempt to approximate the full surface boundary via individual hue slices. If a hue slice other than one of the predetermined number of hue slices is to be extracted from the table, it is obtained by interpolation between the predetermined slices. As can readily be understood, when the number of hue slices contained in the table increases, the accuracy of the representation of the gamut boundary also increases, as does the accuracy of values obtained by interpolation. Thus, it is preferable to populate the hue slice table with a sufficient number of hue slices so as to obtain the best possible accuracy in the gamut representation.
One conventional method of generating a hue slice look-up table divides a device's gamut into a fixed number of segments. For example, the gamut may be divided into 16 equally-spaced three-dimensional hue sectors about a lightness (J) axis (similar to cutting a sphere into 16 equal sectors), and each sector is divided into 16 segments. Thus, the gamut is divided into 256 (16×16) separate segments. In generating the hue slice table, each segment is analyzed to find a point of maximum chroma within the segment. Once the maximum chroma point is found within the segment, a hue slice is obtained at the hue of the maximum chroma point and the obtained hue slice is inserted into the table. The same process is performed for each segment with the resulting hue slice being inserted into the table. Thus, the foregoing conventional technique generates a hue slice look-up table with a fixed size and with a fixed number of elements.
The foregoing technique does, however, suffer from some problems. One problem is that, since only a maximum chroma point is obtained for each segment, other chroma points of interest (e.g., other chroma points on the boundary surface) within the segment can be missed. Thus, when it is necessary to use interpolation to map a point that falls between hue slices in the table, the interpolated result may not be a very accurate representation of the boundary surface. Accordingly, what is needed is a way to generate a hue slice table that can capture more chroma points of interest so that the hue slices in the table form a more accurate representation of the gamut boundary surface.
Another aspect of the invention lies in ordering of hue slice points when the points are inserted into the hue slice look-up table. Conventionally, once hue slice points for a hue slice are determined, they are placed in the look-up table in either ascending or descending order based on lightness values. However, in some instances, the darkest point that falls on the lightness axis in a hue slice may not actually be the darkest point in the hue slice. As a result, sorting the hue slice points by lightness values would result in an erroneous representation of the gamut boundary since the darkest point would be out of order relative to the darkest point on the lightness axis. Thus, what is needed is a better way to order hue slice points so they will accurately represent the gamut boundary surface, regardless of their lightness values.